package main

import "fmt"

func main() {
	a := Dog{}
	bar(a)
}
func bar(a Animal) {
	a.run()
	a.Speak()
}

// 空接口 interface{} 对方法集 零要求，所以 所有类型 都实现它。
// 实现interface 全部方法都实现，缺一就编译失败；
// 接口只能定义函数签名，不能有函数体，不能持有字段
type Animal interface {
	Speak()
	run()
}

type Dog struct{}

func (d Dog) Speak() {
	fmt.Println("Dog is Woof!")
}
func (d Dog) run() {
	fmt.Println("Dog is running!")

}
